const CODE_MAPS = {
	200: "OK",
	10001: "用户名错误",
	10002: "密码错误",
	10003: "用户不存在",
	10004: "用户已存在",
	10005: "用户已被禁用",
	10006: "用户未被激活",
	10007: "用户未登录",
	10008: "用户未注册",
};

/**
 * 生成 JSON 格式的响应数据, 只有状态码为 200 时才会返回 data 字段
 *
 * @param data - 响应数据（默认为 null）
 * @param code - 响应状态码（默认为 200）
 * @param message - 响应消息（默认为状态码对应的默认消息）
 *
 * @example <caption>正常传参</caption>
 * jsonResponse(null, 200, "OK");
 * @example <caption>字典传参</caption>
 * jsonResponse({ code: 10001, message: "用户名错误", xxx });
 * @example <caption>字典传参, 返回参数放入 data</caption>
 * jsonResponse({ code: 200, data: { token: 'xx' } });
 *
 * @returns JSON 格式的响应数据
 */
export function jsonResponse(
	data: any = null,
	code = 200,
	message: string | null = null,
) {
	const res: {
		code: number;
		message: string;
		data?: any;
	} = {
		code: code,
		message: message || CODE_MAPS[code],
		data: data,
	};
	if (data != null && Object.hasOwn(data, "code")) {
		res.code = data.code;
		res.message = data.message || CODE_MAPS[data.code];
		data.code = undefined;
		data.message = undefined;
		if (Object.hasOwn(data, "data")) {
			res.data = data.data;
		} else {
			res.data = data;
		}
	}
	if (res.code !== 200) {
		res.data = undefined;
	}
	return res;
}
